package gui.estudiante;

import gui.calificacion.DialogoCalificacionesPorEstudiante;
import gui.calificacion.PanelCalificacionesPorEstudiante;
import gui.curso.PanelCurso;

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.border.TitledBorder;
import javax.swing.table.TableRowSorter;

import modelo.ModeloCalificacionDetalle;
import modelo.ModeloEstudiantesPorCurso;
import java.awt.SystemColor;

public class PanelEstudiantesPorCurso extends JPanel {

	private static final long serialVersionUID = 1L;
	private JPanel panelBuscar = null;
	private JLabel lblBuscar = null;
	private JComboBox cmbBuscar = null;
	private JTextField txtBuscar = null;
	private JCheckBox checkBoxActivo = null;
	private JCheckBox checkBoxInactivo = null;
	private JCheckBox checkBoxTodosEstudiantes = null;
	private JPanel panelListaEstudiantePorCurso = null;
	private JScrollPane jspListaEstudiantePorCurso = null;
	private JTable tblListaEstudiantePorCurso = null;
	private ModeloEstudiantesPorCurso modeloEstudiantesPorCurso = null;
	private JButton btnCerrar = null;
	private int indiceComboBuscar = 0;
	private static int idEstudiante = 0;
	private JButton btnVerCalificaciones = null;

	/**
	 * This is the default constructor
	 */
	public PanelEstudiantesPorCurso() {
		super();

		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.modeloEstudiantesPorCurso = ModeloEstudiantesPorCurso
				.getInstancia();
		this.setSize(884, 378);
		this.setLayout(null);
		this.add(getPanelBuscar(), null);
		this.add(getCheckBoxActivo(), null);
		this.add(getCheckBoxInactivo(), null);
		this.add(getCheckBoxTodosEstudiantes(), null);
		this.add(getPanelListaEstudiantePorCurso(), null);
		this.add(getBtnCerrar(), null);
		this.add(getBtnVerCalificaciones(), null);
	}

	/**
	 * This method initializes panelBuscar
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelBuscar() {
		if (panelBuscar == null) {
			lblBuscar = new JLabel();
			lblBuscar.setBounds(new Rectangle(10, 21, 55, 23));
			lblBuscar.setText("Buscar:");
			panelBuscar = new JPanel();
			panelBuscar.setLayout(null);
			panelBuscar.setBounds(new Rectangle(255, 18, 445, 58));
			panelBuscar.setBorder(BorderFactory.createTitledBorder(
					BorderFactory.createLineBorder(Color.black, 1), "Busqueda",
					TitledBorder.DEFAULT_JUSTIFICATION,
					TitledBorder.DEFAULT_POSITION, new Font("SansSerif",
							Font.PLAIN, 12), Color.black));
			panelBuscar.add(lblBuscar, null);
			panelBuscar.add(getCmbBuscar(), null);
			panelBuscar.add(getTxtBuscar(), null);
		}
		return panelBuscar;
	}

	/**
	 * This method initializes cmbBuscar
	 * 
	 * @return javax.swing.JComboBox
	 */
	private JComboBox getCmbBuscar() {
		if (cmbBuscar == null) {
			cmbBuscar = new JComboBox();
			cmbBuscar.setBounds(new Rectangle(67, 21, 151, 23));
			cmbBuscar.setModel(new DefaultComboBoxModel(new String[] {
					"ID Estudiante", "Nombre", "Apellido", "Telefono" }));
			cmbBuscar.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					indiceComboBuscar = cmbBuscar.getSelectedIndex();
				}
			});

		}
		return cmbBuscar;
	}

	/**
	 * This method initializes txtBuscar
	 * 
	 * @return javax.swing.JTextField
	 */
	private JTextField getTxtBuscar() {
		if (txtBuscar == null) {
			txtBuscar = new JTextField();
			txtBuscar.setBounds(new Rectangle(221, 21, 210, 23));
			txtBuscar.addKeyListener(new java.awt.event.KeyAdapter() {
				public void keyReleased(java.awt.event.KeyEvent e) {
					if (e.getKeyCode() == KeyEvent.VK_BACK_SLASH) {
						getTxtBuscar().setText("");
					}
					TableRowSorter<ModeloEstudiantesPorCurso> sorter = new TableRowSorter<ModeloEstudiantesPorCurso>(
							modeloEstudiantesPorCurso);
					tblListaEstudiantePorCurso.setRowSorter(sorter);
					sorter.setRowFilter(RowFilter.regexFilter("(?i)"
							.concat(getTxtBuscar().getText()),
							indiceComboBuscar));
				}
			});
		}
		return txtBuscar;
	}

	/**
	 * This method initializes checkBoxActivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxActivo() {
		if (checkBoxActivo == null) {
			checkBoxActivo = new JCheckBox();
			checkBoxActivo.setBounds(new Rectangle(709, 20, 156, 23));
			checkBoxActivo.setText("Estudiantes Activos");
			checkBoxActivo.setName("ACTIVO");
			checkBoxActivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxActivo.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxTodosEstudiantes.setSelected(false);
								modeloEstudiantesPorCurso
										.actualizarTableParametros(checkBoxActivo
												.getName());
							}
						}
					});

		}
		return checkBoxActivo;
	}

	/**
	 * This method initializes checkBoxInactivo
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxInactivo() {
		if (checkBoxInactivo == null) {
			checkBoxInactivo = new JCheckBox();
			checkBoxInactivo.setBounds(new Rectangle(709, 39, 156, 23));
			checkBoxInactivo.setText("Estudiantes Inactivos");
			checkBoxInactivo.setName("INACTIVO");
			checkBoxInactivo
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxInactivo.isSelected() == true) {
								checkBoxActivo.setSelected(false);
								checkBoxTodosEstudiantes.setSelected(false);
								modeloEstudiantesPorCurso
										.actualizarTableParametros(checkBoxInactivo
												.getName());
							}
						}
					});

		}
		return checkBoxInactivo;
	}

	/**
	 * This method initializes checkBoxTodosEstudiantes
	 * 
	 * @return javax.swing.JCheckBox
	 */
	private JCheckBox getCheckBoxTodosEstudiantes() {
		if (checkBoxTodosEstudiantes == null) {
			checkBoxTodosEstudiantes = new JCheckBox();
			checkBoxTodosEstudiantes.setBounds(new Rectangle(709, 58, 156, 23));
			checkBoxTodosEstudiantes.setText("Todos los Estudiantes");
			checkBoxTodosEstudiantes.setName("TODOS");
			checkBoxTodosEstudiantes
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (checkBoxTodosEstudiantes.isSelected() == true) {
								checkBoxInactivo.setSelected(false);
								checkBoxActivo.setSelected(false);
								modeloEstudiantesPorCurso
										.actualizarTableParametros(checkBoxTodosEstudiantes
												.getName());
							}
						}
					});

		}
		return checkBoxTodosEstudiantes;
	}

	/**
	 * This method initializes panelListaEstudiantePorCurso
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getPanelListaEstudiantePorCurso() {
		if (panelListaEstudiantePorCurso == null) {
			panelListaEstudiantePorCurso = new JPanel();
			panelListaEstudiantePorCurso.setLayout(null);
			panelListaEstudiantePorCurso.setBounds(new Rectangle(6, 90, 871,
					227));
			panelListaEstudiantePorCurso.setBorder(BorderFactory
					.createTitledBorder(BorderFactory.createLineBorder(
							SystemColor.controlText, 1),
							"Lista de Estudiantes del Curso de null",
							TitledBorder.DEFAULT_JUSTIFICATION,
							TitledBorder.DEFAULT_POSITION, new Font("Dialog",
									Font.BOLD, 14), SystemColor.controlText));
			panelListaEstudiantePorCurso.add(getJspListaEstudiantePorCurso(),
					null);
		}
		return panelListaEstudiantePorCurso;
	}

	/**
	 * This method initializes jspListaEstudiantePorCurso
	 * 
	 * @return javax.swing.JScrollPane
	 */
	private JScrollPane getJspListaEstudiantePorCurso() {
		if (jspListaEstudiantePorCurso == null) {
			jspListaEstudiantePorCurso = new JScrollPane();
			jspListaEstudiantePorCurso
					.setBounds(new Rectangle(12, 25, 850, 185));
			jspListaEstudiantePorCurso
					.setViewportView(getTblListaEstudiantePorCurso());
		}
		return jspListaEstudiantePorCurso;
	}

	/**
	 * This method initializes tblListaEstudiantePorCurso
	 * 
	 * @return javax.swing.JTable
	 */
	private JTable getTblListaEstudiantePorCurso() {
		if (tblListaEstudiantePorCurso == null) {
			tblListaEstudiantePorCurso = new JTable(modeloEstudiantesPorCurso);
		}
		return tblListaEstudiantePorCurso;
	}

	/**
	 * This method initializes btnCerrar
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnCerrar() {
		if (btnCerrar == null) {
			btnCerrar = new JButton();
			btnCerrar.setBounds(new Rectangle(451, 326, 120, 38));
			btnCerrar.setText("Salir");
			btnCerrar.setIcon(new ImageIcon("./lib/images/salir.png"));
			btnCerrar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					DialogoEstudiantesPorCurso.getInstancia().setVisible(false);
				}
			});
		}
		return btnCerrar;
	}

	public static int getIdEstudiante() {
		return idEstudiante;
	}

	public static void setIdEstudiante(int idEstudiante) {
		PanelEstudiantesPorCurso.idEstudiante = idEstudiante;
	}

	/**
	 * This method initializes btnVerCalificaciones
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBtnVerCalificaciones() {
		if (btnVerCalificaciones == null) {
			btnVerCalificaciones = new JButton();
			btnVerCalificaciones.setBounds(new Rectangle(271, 326, 161, 38));
			btnVerCalificaciones.setText("Ver Calificaciones");
			btnVerCalificaciones
					.setIcon(new ImageIcon("./lib/images/list.png"));
			btnVerCalificaciones
					.addActionListener(new java.awt.event.ActionListener() {
						public void actionPerformed(java.awt.event.ActionEvent e) {
							if (tblListaEstudiantePorCurso
									.isRowSelected(tblListaEstudiantePorCurso
											.getSelectedRow()) == false) {
								JOptionPane
										.showMessageDialog(
												null,
												"Debe seleccionar un Estudiante para ver las calificaciones",
												"Atencion",
												JOptionPane.ERROR_MESSAGE);
							} else {
								setIdEstudiante(Integer
										.parseInt(tblListaEstudiantePorCurso
												.getValueAt(
														tblListaEstudiantePorCurso
																.getSelectedRow(),
														0).toString()));
								ModeloCalificacionDetalle.getInstancia()
										.actualizarTableParametros(
												ModeloCalificacionDetalle
														.getParametro());
								PanelCalificacionesPorEstudiante panelCalificacionesPorEstudiante = PanelCalificacionesPorEstudiante
										.getInstancia();
								if (panelCalificacionesPorEstudiante.verficar() == true) {
									DialogoCalificacionesPorEstudiante dialogoCalificacionesPorEstudiante = DialogoCalificacionesPorEstudiante
											.getInstancia();
									dialogoCalificacionesPorEstudiante
											.agrandar();
									dialogoCalificacionesPorEstudiante = null;
								}
								panelCalificacionesPorEstudiante = null;
								DialogoCalificacionesPorEstudiante dialogoCalificacionesPorEstudiante = DialogoCalificacionesPorEstudiante
										.getInstancia();

								dialogoCalificacionesPorEstudiante
										.setVisible(true);
								dialogoCalificacionesPorEstudiante = null;

							}

						}
					});
		}
		return btnVerCalificaciones;
	}

} // @jve:decl-index=0:visual-constraint="10,10"
